/*
题目：最小时间差
给定一个 24 小时制（小时:分钟 "HH:MM"）的时间列表，找出列表中任意两个时间的最小时间差并以分钟数表示。

https://leetcode.cn/problems/minimum-time-difference/description/
 */
public class FindMinDifference {
    public int findMinDifference(List<String> timePoints) {
        // 题目思路：将时间转化成分钟数
        // 然后进行排序，分别计算两两时间差
        // 或者头尾差
        // 对于 24 小时的 表示法，总共只有 24 * 60 种可能，超过了必有重复
        if (timePoints.size() > 24 * 60) {
            return 0;
        }
        int[] minutes = new int[timePoints.size()];
        for (int i = 0; i < timePoints.size(); i ++) {
            String str = timePoints.get(i);
            minutes[i] = Integer.parseInt(str.substring(0, 2)) * 60 +
                    Integer.parseInt(str.substring(3, 5));
        }

        Arrays.sort(minutes);
        int src = Integer.MAX_VALUE;
        for (int i = 1; i < minutes.length; i ++) {
            src = Math.min(src, minutes[i] - minutes[i - 1]);
        }
        // 头尾时间差：让头变成第二天的时间，然后减去 尾
        return Math.min(src, minutes[0] + 24 * 60 - minutes[minutes.length - 1]);
    }
}
